/**
*
*
*\author Isabel Martín Herrero 48539974 S
*
*
**/

#include <iostream>
#include <sstream>
#include "Coordenada.h"

/**
*\file IDibujable.h
*\brief Archivo .h de la clase IDibujable
*Archivo que contiene la declaración la clase IDibujable
*
**/

using namespace std;

#ifndef _TOPO_H_
#define _TOPO_H_

/** \brief Clase IDibujable
 *
 * La clase IDibujable permite crear, destruir y modificar objetos de tipo Círculo.Un objeto Círculo  tiene los atributos privados radio (float) y centro (Coordenada)
 * La clase IDibujable es amiga de ostream
 */

class IDibujable
{
	public:
		/** \brief Destructor de la clase IDibujable
		*
		* Libera la memoria ocupada por un objeto de tipo IDibujable
		*/
		virtual ~IDibujable()=0;

		/** \brief Método mover.
		*
		* Mueve la figuras
		* \param porigen Nuevo origen .
		* \return Devuelve el origen anterior.
		*/
		virtual Coordenada mover(const Coordenada & porigen) =0;

		/** \brief Método getOrigen.
		*
		* Devuelve la coordenada origen
		* \return Devuelve una coordenada.
		*/
		virtual Coordenada getOrigen()const = 0;

		/** \brief Método pintar.
		*
		* Devuelve la representacion de la figura en SVG
		* \param os Objeto de flujo de salida
		* \return Devuelve void
		*/
		virtual void pintar(ostream& os)const = 0;

		/** \brief Método puedoPintarme
		*
		* Devuelve true si puede pintarse de forma individual
		* \return Devuelve bool
		*/
		virtual bool puedoPintarme()const = 0;

		/** \brief Método leeEntrada.
		*
		* Lee los parámetros necesarios para crear una figura desde el flujo de entrada is
		* \param is Toma como parametro un objeto de tipo flujo de entrada.
		* \return Devuelve void.
		*/
		virtual void leeEntrada(istream& is) = 0;

		/** \brief Método escalar.
		*
		* Escala una figura respecto a un porcentaje que se pasa por parametro
		* \return Devuelve void.
		*/
		virtual void escalar(float = 100) = 0;
		
		/** \brief Método escalar.
		*
		* Escala una figura respecto a un porcentaje que se pasa por parametro
		* \return Devuelve void.
		*/
		virtual IDibujable* clonar()const =0;
		
		/** \brief Método clonar()
		*
		* Escala una figura respecto a un porcentaje que se pasa por parametro
		* \return Devuelve void.
		*/
		virtual void ocultar(bool) =0;
		
		/** \brief Método ocultar.
		*
		* Escala una figura respecto a un porcentaje que se pasa por parametro
		* \return Devuelve void.
		*/
		virtual bool isOculto()const =0;
		
};

#endif
